package edu.neu.swc.cloud.service;

import edu.neu.swc.cloud.domain.ConfigPro;
import edu.neu.swc.cloud.domain.Equipment;
import edu.neu.swc.cloud.domain.Rent;

import java.util.List;

public interface EquipmentService {
    /**
     * 添加设备
     * @param equipment
     */
    void addEquip(Equipment equipment);

    /**
     * 按照序号删除设备
     * @param equ_id
     */
    void deleteEquipById(int equ_id);

    /**
     * 更新设备
     * @param equipment
     */
    void update(Equipment equipment);

    /**
     * 查询所有设备
     * @return
     */
    List<Equipment> findAll();

    /**
     * 多字段条件查询设备
     * @param equipment
     * @return
     */
    List<Equipment> findEquipByCon(Equipment equipment);

    /**
     * 按照ID关闭设备
     * @param equ_id
     */
    void shutById(int equ_id);

    /**
     * 按照ID打开设备
     * @param equ_id
     */
    void startById(int equ_id);

    /**
     * 依据id查询设备
     * @param equ_id
     * @return
     */
    Equipment findEquipById(int equ_id);

    /**
     * 依据工厂编号找到租用的设备
     * @param my_fac_id
     * @return
     */
    List<Rent> findRentByFacId(int my_fac_id);

    /**
     * 找到所有可以借用的设备
     * @return
     */
    List<Equipment> findEquipAvail();

    /**
     * 租用设备，将租用的设备放入
     * @param rent
     */
    void rentEquip(Rent rent);

    /**
     * 归还设备，依据设备ID，即删除rent中的记录，修改equip状态
     * @param equ_id
     */
    void returnBack(int equ_id);

    /**
     * 依据设备ID寻找配置产能信息
     * @param eq_id
     * @return
     */
    List<ConfigPro> findConfigByEquId(int eq_id);

    /**
     * 为设备添加配置
     * 当存在配置时，修改配置信息
     * 当不存在配置时，添加配置信息
     * @param configPro
     */
    void AddConfig(ConfigPro configPro);

    /**
     * 依据条件查找租用信息
     * @param my_fac_id
     * @param equipment
     * @return
     */
    List<Rent> findRentByFacIdAndCon(int my_fac_id, Equipment equipment);

    /**
     * 依据设备ID查询租用记录
     * @param eq_id
     * @return
     */
    List<Rent> findRentByEquId(int eq_id);

    /**
     * 获取设备数目信息
     * @param eq_name
     * @return
     */
    int getEquipCounts(String eq_name);

    /**
     * 获取设备信息
     * @param eq_name
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Equipment> findEquipByQuery(String eq_name, int pageStart, int pageSize);

    /**
     * 找到我租用的设备数目
     * @param eq_name
     * @param fac_id
     * @return
     */
    int getMyEquipCounts(String eq_name, int fac_id);

    /**
     * 找到我租用设备
     * @param eq_name
     * @param fac_id
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<Equipment> findMyEquipByQuery(String eq_name, int fac_id, int pageStart, int pageSize);

    /**
     * 依据条件查询工厂对应设备的产能数目
     * @param s
     * @param fac
     * @param equ
     * @return
     */
    int getConfigCounts(String s, int fac, int equ);

    /**
     * 查询产能信息
     * @param s
     * @param fac
     * @param equ
     * @param pageStart
     * @param pageSize
     * @return
     */
    List<ConfigPro> findConfigByQuery(String s, int fac, int equ, int pageStart, int pageSize);

    /**
     * 依据工厂ID查找所有设备
     * @param id
     * @return
     */
    List<Equipment> findEquipByFacId(int id);

    /**
     * 添加工厂自有设备
     * 这里需要在设备表中添加rent值为-1的设备
     * 且需要在租用表中添加对应关系，且需要将租用标志位设为1
     * @param equipment
     */
    void addFacEquip(Equipment equipment);
}
